SVD:
Randomized SVD:
Full SVD is slow. Randomized SVD much faster (pot.by an order of magnitude).
SVD runtime complexity: O(min(m$^2$n, mn$^2$))
Instead of calculating SVD on full matrix A (size: (m,n)), use B = AQ of size (m,r) where r << n.
We end up using the same scipy
implementation of SVD, but we just multiply our matrix by a random one to make it smaller. B is a low-rank approximation of A, given that it needs to have the same or similar column space to work well.
In [ ]: